查看原文
其他

【源头活水】视觉子领域中的Transformer

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

作者:知乎—陈星宇

地址:https://www.zhihu.com/people/chen-xing-yu-62-89

最近涌现出大量关于视觉Transformer的的研究,本文不是综述,而是挑选了一些视觉子领域中典型的Transformer应用,学习一下大家如何做跨界的思考与实践。另外,本文不对每篇论文做详细解读,仅提取它们的关键思想和设计。

01

Transformer

http://jalammar.github.io/illustrated-transformer/

Transformer提出于NeurIPS17的文章Attention is all you need,其核心是self-attention:
输入为  ,是一个序列,序列中的元素称为token。对  进行线性运算得到  ,其中  进行相似度计算,获得  中每一个元素与  的相关性。根据这种相关性,利用  中相应的元素来构造输出。类似于CNN中的并行分支,self-attention也可以被设计为并行结构,称为multi-head attention:
再此基础上,衍生出了Transformer的encoder和decoder,一个Transformer通常由多个encoder和decoder堆叠而成。一般结构如下图所示。
图1:Transformer结构
图2:encoder-decoder细节
除self-attention外,encoder和decoder还包含残差、归一化以及Feed Forward(FFN):
值得注意的是,最近的文章 Attention is Not All You Need: Pure Attention Loses Rank Doubly Exponentially with Depth 表明,残差与FFN非常重要,有助于对抗rank collapse,而归一化的作用不大。
https://zhuanlan.zhihu.com/p/356444120
此外,还有一个小细节 positional encoding。由于self-attention具有排列不变性,利用位置编码来提供空间/时序信息。进入self-attention之前,序列特征与positional encoding以加法的形式融合。positional encoding可以通过学习得到,也可以认为设计。通常,用sin-cos联合编码( 表示token的index,  表示feature dim):
图3:序列长度为10,embeding特征长度为65的positional encoding
图4:融合embeding特征与positional encoding


02

小Transformer
Transformer的一个缺点在于”大“,不论是计算量、参数量、还是所需要的内存资源,都限制了它在视觉领域的落地与应用。因此,我比较关注如何把Transformer做小。有两种角度:从self-attention出发,从encoder/decoder block出发。
基于self-attention。self-attention的缺点在于,为了描述token之间相似度,以平方复杂度的代价构造了一个attention map。很早就意识到这个问题,并设计了线性attention:
在此基础上,LambdaNetworks: Modeling long-range Interactions without Attention 提出了LambdaNetwork
图5:LambdaNetwork的计算流程
输入输出关系为:  ,一般地 
构造Lambda function如下:
其中  为  的归一化,  为positional encoding。  称为positional lambda  ,  称为content lambda  。图5中,  ,因此用  的Lambda代替了  的attention map。一般而言,深度方向(例如CNN特征的channel方向)嵌入了较强的语义信息,因此  较attention map而言,语义性更强。
对于  个不同的position,Lambda function构造的“内容”是一致的,即  。而  根据quary的position给出不同的信息,可以看做上下文关系。
基于block,DeLighT: Deep and Light-weight Transformer 从block的角度对Transformer进行了加深和轻量化。一个Transformer block只有一个非线性激活,而CNN每个卷积层后均加入激活函数,如果设置block的数量接近CNN中卷积层数,参数量会很大。因此Transformer的非线性建模能力理论上弱于CNN。因此,作者希望增加Transformer的深度,并控制参数量。
图6:DeLighT
如上图所示DeLighT在attention之前增加了  个线性层,并缩小attention特征的的维度,在FFN上也做了一个沙漏设计来减小参数量。在上图绿色部分,作者采用了 group linear transformations (GLTs),利用feature shuffle和group来增强模型在学习过程中的鲁棒性并减小参数量。
图7:GLT
另外,作者认为整个网络中均匀增加参数量会带来冗余。类似地,ResNet50的各个block也有不同的卷积层数。作者的做法是控制  ,在深度增加的同时,组件增加参数量。靠近input的地方shallower and narrower,靠近output的地方deeper and wider。
图8:DeLighT逐渐增加block的参数量
DeLighT的研究动机并不是特别明确,加深了Transformer却没有增加其非线性表达能力,我并未理解背后的原因。


03

Transformer in Classification
ViT 是第一个将Transformer用于视觉分类的工作,思想简洁清晰,将图像分为多个path来构造序列,再输入传统的Transformer结构。这并不是一种全新的思想,早年在RNN大火的时候就有学者把图像分类视为序列问题,而Transformer相比于RNN的一点优势在于可并行处理。
DeepViT: Towards deeper vision transformer 对ViT的深度进行了研究,发现通过增加encoder block带来性能提升会饱和。作者对这个现象进行了更多实验,发现现象的本质是attention的相似度增加,称为attention collapse。
图28:attention collapse分析
如图28(a)所示,在一个有32个block的ViT中,随着block index的增加,attention相似度也增加。如(b)所示,当block数量从12增加到32,有相似attention的block也增加。但是,head之间的相似度始终很低。因此,作者设计了Re-attention:
通过一个可学习的transformation matrix  来融合multi-head的attention map。
图29:Re-attention实验
从实验可以看出,Re-attention显著降低了attention的相似性。
TransFG: A Transformer Architecture for Fine-grained Recognition 将Transformer应用到了精细分类任务中。作者的实验表明ViT在精细分类任务中以达到了较好地性能,但是精细分类需要更多地关注“有鉴别力”的区域,因此现有方法有待提高。
图9:TransFG
在划分patch序列时,作者认为保持一定的overlap有助于保存局部区域信息。这些patch经过线性映射获得Transformer的输入:
用  表示第  层encoder的输出,共  层。通常,  被看作class token,用于分类,但作者认为这种方法并未考虑后续token的信息,可能丢失了discriminative regions。于是,提出part selection module(PSM),具体做法是改变最后一层encoder的输入:
  • 整合此前所有attention weight  ,该操作可以捕捉信息传播,因此可用于选择 discriminative regions,  为head数量。
  • 在  里选择最大的  个值  ,这些位置被用于在  中提取相应的token:

  • 为鼓励多个head关注不同的discriminative regions,作者提出duplicate loss:
如图9所示,仅选择一些token进入最后一层encoder。与ViT一致,利用第一个token作为class token。另外,作者提出了一个与Transformer关系不大的损失函数来增强精细分类的性能,称为contrastive loss,目的是最小化不同label对应class token的相似度,最大化相同label对应class token的相似度。contrastive loss包含了一定的自监督思想:
图10:contrastive loss对混淆矩阵的影响
图11:PSM可视化
从可视化结果来看,PSM确实能找到有判别力的patch。直观理解,attention最强的地方就是最需要关注的地方。
Swin Transformer: Hierarchical Vision Transformer using Shifted Windows提出了一种通用的视觉Transformer backbone,将CNN的层级特征思想引入到Transformer中。
图30:Swin Transformer
如图30所示,类似于VGG、ResNet等CNN结构,Swin-T也包含多个stage,每个stage处理一种特征scale。Stage之间的变换操作为:聚合周围的2*2个token,相当于2倍下采样,特征长度也变为2倍。作者提出window attenion,即在一系列没有overlap的窗口内进行attention操作,该操作的优点是引入了局部感受野,同时避免了平方复杂度。但是,window之间缺乏连接,作者提出shifted window来解决这个问题。
图31:Shifted window
如图31所示,交替使用规则window(左)和shifted window(右),有效建模了局部特征。作者采用circle shift来保持window数量一致。Swin-T作为通用的backbone用于分割、检测、实例分割、语义分割任务,均取得了较好地性能。
图32:circle shift


04

Transformer in Detection
直到DETR,Transformer才算真正地在视觉领域干了一件路人皆知的大事。深度学习时代,目标检测方法被广为诟病的问题在于流程过于繁琐。隔壁的语义分割领域很早就实现了全卷积预测,而检测领域的同学们还需要在图像上画anchor,需要对检测结果进行NMS。Anchor和NMS严重影响了检测方法的优雅程度,于是近几年来大家积极思考如何去掉先验知识和后处理。DETR是第一个完全去掉anchor和后处理的方法。但是,与ViT类似,DETR思想并不是全新的,2016年的MultiBox就提出过set prediction的思想,而DETR只是在其中引入了Transformer。可见,学术研究就是一个组合、创新、再融合的过程,research这个词十分贴切。
图12:DETR
相比于“传统”的检测方法,DETR的整个框架非常简洁:CNN下采样,将空间拉成序列,加上positional encoding,Transformer encoder-decoder,FFN。仔细品一下这个过程,还是引入了先验知识,即positional encoding。但相比于anchor,positional encoding的设计简单很多,甚至可以随网络一起学习。另一个需要随网络一起训练的是的关键模块是object query,这些query就像一群观察者,以自己的视角观察encoding特征。这种角色类似于CNN方法中的classification/regression head,head在特征上滑动即对各个位置进行观察。而如图13所示,object query的能力更强,可观察的范围更灵活。
图13:20个object query负责的图像区域可视化
DETR的inference优雅了,但没有了anchor也就没有了anchor assignment,即训练过程中缺乏预测目标与GT的一一对应关系。作者采用Hungarian算法将预测结果和GT匹配起来。假设一次推理过程产生N个预测(N>>GT目标个数);预测结果表示为  ;预测表示为  。找一个最佳匹配关系:
最终的损失函数为:
基于CNN的目标检测网络通常会在ImageNet进行预训练。并且,基于对比学习的的预训练方法广为流行。针对Transfromer的预训练还是一片空白,UP-DETR: Unsupervised pre-training for object detection with transformers 在此方向进行了探索,并针对目标检测问题提出了创造性地是思考。
图14:UP-DETR
如图14所示,将全图用CNN编码并输入Transformer encoder;随机crop一个patch并用CNN编码,并与object query相加;任务的目标是预测该patch的定位信息。另外,在CNN特征与Transformer decoder特征之间做一个特征重建损失,以保持语义一致性。进一步,可以crop多个image patch,为了加强训练鲁棒性,作者采用了feature shuffle;此外,引入了attention mask,对每个patch单独做attention:
近一两年有特别多视觉Transformer的工作,如果要评选一个best的话,我必定投票给Deformable DETR: Deformable transformers for end-to-end object detection。大多工作都是在改变视觉任务的处理模式,去迎合Transformer的要求,唯有Deformable DETR,改变Transformer去迎合视觉任务的需求。回顾一下,CNN最成功的点在哪里?我认为是局部感受野,有效降低了参数量,并增强了认知图像的灵活性。自CNN成功占领视觉领域以后,最成功改进是什么?我认为是由局部感受野造就的多尺度,检测领域有FPN,分割领域有UNet,各种各样的特征融合方法层出不穷。反观Transformer,略微暴力了一些,如果没有CNN对图像特征进行下采样,单独的Transformer难以直接处理图像。因此,CNN的多尺度特征难以直接引入Transformer。Deformable DETR提出了deformable attention:
图15:Deformable attention
 为query特征,  为CNN的feature map,  为multi-head的索引,  ,  均是由对  的线性操作获得。这个操作引入了可学习局部感受野,即对于特征图上的一个query位置,仅利用学习得到的$K$个位置来做特征融合。并且,attention map不再是一种相似度,而是基于线性映射的query自主表达。这不是卷积,也不是self-attention,而是融合了两者优势的更灵活的视觉算子。
在此基础上,引入CNN的多尺度特征,提出multi-scale deformable attention:
 为归一化的坐标,  表示re-scale,每层提取  个key特征,共  层。
图16:Deformable DETR
于是,Deformable DETR的设计如下:
  • 使用multi-scale deformable attention代替self-attention
  • ResNet输出C3-C5特征,再次下采样获得C6
  • 类似于positional embeding,引入的scale-level embeding
另外,不再需要DETR中的双边匹配了,每个object query都能预测出  个deformable attention位置,这些位置即可用于GT assignment,因此收敛性也得到了改善。

05

Transformer in MOT
MOT是detection的衍生任务,因此有了DETR一定会有它的MOT版本。MOT分为在线和离线两种,前者仅利用历史信息,而后者可以看到全时间序列的信息。这两个方向都被Transformer做过了,首先看一下在线任务。虽然基于Transformer的MOT是在DETR上的直观衍生,但解决了一个较为本质问题,形成了检测与跟踪的”统一“框架。检测与跟踪本质上是同一种任务,即对目标进行分类和定位。我认为此前的MOT方法未能做到检测与跟踪的统一,原因是跟踪模块实际上在做数据关联,跟踪任务”被动地“被实现了。为了理解这个问题,对比一下SOT。SOT利用目标特征逐一与图像特征计算相似度,我把这种从目标特征出发模式称为主动跟踪。TrackFormer: Multi-object tracking with transformers 实现了检测与跟踪框架的统一。
图17:TrackFormer
图17,TrackFormer的主要贡献在于引入了track query,可以看做instance特征。track query与object query组合在一起,前者负责跟踪,后者负责感知此前未被检测到的目标。训练阶段需要使用图像对,作者设计了一些数据扩增方法,如随机采样图像对,随机丢弃track query,随机补充背景作为track query。
End-to-end video instance segmentation with transformers 对离线MOT进行了探索。
图18:VisTR
既然是离线任务,可以采用批处理方法。首先利用CNN提取序列图像特征,  →  ;转化为序列后一次性输入encoder,  →  →  ;decoder一次性输出所有时间上的object instance,保持时序顺序,并在每一帧的预测中保持instance的顺序一致。这个流程下来,MOT很自然地实现了,跟踪结果可以在对应的输出位置找到。难点在于如何”在每一帧的预测中保持instance的顺序一致“。作者提出了一种instance sequence matching来解决这个问题,基本思想与DETR的双边匹配类似,匹配损失的设计也一致。区别在于DETR匹配的是目标instance,而这里先把每一帧的预测组成instance sequence,再与GT sequence进行匹配损失函数计算。此外,作者设计了instance sequence segmentation分支,我暂时没有理解分割设计的精髓。


06

Transformer in SOT
Transformer meets tracker: Exploiting temporal context for robust visual tracking 将Transformer嵌入现有的SOT pipeline中。作者认为现有方法中,视频帧被独立看待,没有进行关联推理,希望构造一种frame-wise relationship。
图33:整合跟踪信息的Transformer
如图33所示,经CNN特征提取后,模板特征  和搜索区域特征  被各自的self-attention处理,接着两者进行cross-attention相似度计算,获得attention map  。特别地,模板特征来自历史前  帧。认为模板特征与搜索区域特征的cross-attention建模了帧间的pixel-to-pixel关系,可以传播时序内容。此外,作者利用高斯分布构造了每一个模板特征的mask ,这个mask有两方面的作用
  • 作为空间定位信息传播给搜索区域, 
  • 在模板特征中提取target特征,再传播给搜索区域, 
最终获得解码特征  。在Siamese跟踪框架中,  进行互相关。在DCF框架中,利用  优化出跟踪模型,再对  进行卷积操作。
上述方法本质上是一种特征融合与增强。Transformer Tracking 认为互相关没有考虑语义信息,而单纯地基于相似度进行度量,这是现有方法的缺点。于是,作者认为如果能获得较好的跟踪特征,就可以构造一种类似检测pipeline的跟踪方法,于是提出TransT。
图34:TransT
图35:ECA与CFA
如图34、35所示,作者使用self-attention(ECA)与cross-attention(CFA)来提取更好的跟踪特征,并堆叠这两种模块4次。此后,再使用一次CFA来获得跟踪特征,并使用分类与回归的head进行对跟踪目标的”检测“。
图36:attention可视化
作者对4次attention进行了可视化,浅层attention已经可以看出一些关键特征,但不够全面。随着层数增加,目标的定位于轮廓逐渐清晰。但是,高层attention中,对template的注意力不够准确,作者认为是融入了搜索区域特征导致的(并未给出有说服力证据)。


07

Transformer in GAN
图19:TransGAN
在图像生成领域,TransGAN: Two transformers can make one strong GAN利用两个Transformer encoder构造生成器与判别器。对于生成器,作者借鉴CNN的多尺度设计了多尺度的encoder,逐渐增加输出token的数量。对于判别器,采用了ViT的分类思路。作者的实验表明,Transformer的生成能力很强,但判别能力不足,因此Transformer生成器加CNN判别器带来了最好的效果。并且,TransGAN对数据扩增的需求很强。
图20:双向attention
Generative adversarial transformers提供了另外一种用Transformer做图像生成任务的思路。与其说是用Transformer做GAN,本文更像是利用attention机制来改善StyleGAN的问题:1)CNN没有双向交互;2)CNN的局部感受野妨碍了long-range依赖和全局理解;3)StyleGAN不能控制局部属性。
用  表示输入的  个向量,维度为  ,可理解为图像特征,  ;用  表示聚合变量(latent),用于控制生成属性。
Attention机制表示为  ,Transformer layer表示为  。在此基础上,作者提出Simplex attention:
  •  表示利用均值和方差进行归一化。
  •  为增益变换,  为偏移变换。
  • 这个表达融合了归一化与从  到  的信息传播,可控制  的统计属性。
进一步,提出Duplex attention,将看作一个组合  ,  是变量(即原始的$Y$)。  ,因此  与  高度相关。
作者认为这是联合bottom-up和top-down的交互方式。
对生成器做以下设计:
  • 分解属性控制向量  ,利用一个映射获得  。
  • 对于每一层卷积,将特征图  与  进行attention,从而自适应地控制局部属性,即  自适应地作用于  的部分空间位置。
对判别器做以下设计:
  • 用训好的embeding初始化一个  。
  • 每个卷积之后  与  进行attention,可以认为该操作自适应地选择性地提取了patch。
  • 最后一层与  级联,进行真假预测。


08

Transformer in 3D视觉
”Attention特别适合处理点云,因为该操作具有排列不变性,以及势(cardinality)不变性“ — 翻译自Point transformer。该作者针对点云处理设计了point transformer layer:
图21:point transformer layer
 为  的邻域(K近邻),Position encoding  ,两层MLP+ReLU,  为3D坐标,各个希腊字母均表示线性操作。
Hand-Transformer: Non-Autoregressive Structured Modeling for 3D Hand Pose Estimation成功将Transformer应用到了基于点云的人体姿态估计。作者认为人体姿态是一种结构化信息,现有方法通常对每个关键点独立处理,缺乏自适应的结构化建模,无法直观获得人体骨骼的上下文关系。
图22:因果/非因果的Transformer
首先,作者认为因果结构(ART)建模了明确的序列关系,而人体的上下文对结构化建模同样重要,因此采用了非因果结构(NART)。但是,NART同等地对待每个输入的token,无法满足结构化建模的需求。因此,在decoder中加入了结构化信息,形成了NARHT。
图23:Hand-Transformer
加入结构化信息的方法如图23所示,设计了一种structured-reference extractor:
  • 利用PointNet对输入点云进行回归,预测出关键点的表达,称为reference pose。
  • 为了使reference pose更有意义,它也将被回归出一个hand pose,并在此加入监督。
Reference pose包含  个特征向量  ,分别对应  个关键点,将  作为decoder的query,解码出最终的hand pose。如图23的右子图所示,作者表示在这种有结构化参考信息的Transformer中,attention的作用就像point-wise voting,可以选择出对该关键点有意义的point特征。从另一个角度来看,本方案可以看作一种两阶段方法,第一阶段是structured-reference extractor,而第二阶段的Transformer用于改良reference pose。
3D视觉领域还有一种特殊的任务,即2D-to-3D生成任务。End-to-end human pose and mesh reconstruction with transformers 从2D图像生成人体的3D结构,称为mesh recovery。类似于2D任务,作者使用Transformer的动机是图卷积难以建模non-local interactions。
图24:METRO
利用CNN对图像进行编码,获得特征向量 。将一个模板人体作为positional encoding,这个模板包含3D关键点  和mesh顶点  ,均为3D坐标。用级联的方式将 与  结合起来作为Transformer的输入,因此总共有  个query,每个query的长度为2051。为增强模型鲁棒性,类似于dropout,作者在训练中利用mask随机屏蔽一些query。我认为整个流程存在一些待思考的问题:
  • 虽然性能不错,但model size应该特别大。
  •  是图像特征,  为3D坐标,它们的级联表达什么呢?按照该结构的思路,我认为应该是想给出某一个关键点或mesh顶点的表达,但2D特征与3D坐标的级联不是特别直观。
  • 如图25所示,相比于图卷积的局部感受野,长距离依赖确实有了,但是这种attention关系似乎难以理解。例如,为了表达右手腕,用到了左手、左脚、头部等特征,不是特别符合人体运动学。关于局部或是全局的问题需要更多的思考和探索。
图25:METRO学习到的长距离依赖
3D human pose estimation with spatial and temporal transformers 提出了PoseFormer探究如何利用时空Transformer实现2D pose到3D pose的lifting过程。由于2D-3D的歧义性,作者采用从2D pose序列恢复3D pose的方案。那么,时间方向的信息需要聚合,某时刻2D关键点的信息也需要聚合。作者设计了两个Transformer encoder分别处理这两种聚合。
图26:PoseFormer
Spatial Transformer Module对每一帧单独进行处理,利用关键点的2D坐标来设计query,输出与关键点数量一致的序列特征,这些特征再flatten得到图26中的粉色方块。每一帧的粉色方块作为Temporal Transformer Module的query,输出与帧数一致的序列特征。进一步,利用可学习的weight加权平均来去掉时间维度,看作是中间帧的特征,再回归得到3D pose。
图27:attention map可视化
作者对attention map进行了可视化,图27左边是空间attention,右边是时序attention,横轴是query index,纵轴是输出序列的index。可见,不论是那种,multi-head设计中的每一个head关注部分query,并将这些query特征送到大多数输出位置。

09

总结
  • Transformer很强大,但我们应该有一个合理的使用动机。大部分工作强调卷积的局部感受野和attention的全局特性。
    • 我不认为Transformer的全局性在视觉任务得到了充分体现。ViT中,“全局”的前提是手动把图像分为了16*16个“局部”。DETR中,“全局”的前提是来自CNN的32倍下采样。
    • 卷积的局部特性很重要,使得CNN轻量化成为了可能,使得多尺度设计成为了可能
  • 再次点赞Deformable DETR,更多地思考Transformer for vision,而不是How to re-formulate vision problem for using Transformer。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存